package com.ryujung.array.leetCode_933;

import java.util.LinkedList;
import java.util.Queue;
/**
 * 写一个 RecentCounter 类来计算最近的请求。

它只有一个方法：ping(int t)，其中 t 代表以毫秒为单位的某个时间。

返回从 3000 毫秒前到现在的 ping 数。

任何处于 [t - 3000, t] 时间范围之内的 ping 都将会被计算在内，包括当前（指 t 时刻）的 ping。

保证每次对 ping 的调用都使用比之前更大的 t 值。

示例：

输入：inputs = ["RecentCounter","ping","ping","ping","ping"], inputs = [[],[1],[100],[3001],[3002]]
输出：[null,1,2,3,3]
 */
public class Solution {

}

class RecentCounter {
    Queue<Integer> q;
    public RecentCounter() {
        q =  new LinkedList<Integer>();
    }
    /**
     * 设定一个区间,t-3000到t的范围内的值保留在list中,
     * 由于元素是根据时间被放入队列的,所以,队列首部的值一定小于后面的值,
     * 循环获取队首的值,如果不在区间内就剔除,直到队首的元素也在区间内.
     */
    public int ping(int t) {
        q.add(t);
        while(q.peek()<t-3000){ //不在t-3000到t的区间内,剔除
            q.poll(); //注意选择poll方法因为队列为空返回null,而remove方法会抛出异常.
        }
        return q.size();//返回剔除后的队列长度即可
    }
}

/**
 * Your RecentCounter object will be instantiated and called as such:
 * RecentCounter obj = new RecentCounter();
 * int param_1 = obj.ping(t);
 */